<?php
namespace Home\Common\Behavior;
/**
 * 语言检测 并自动加载语言包
 */
class CheckLangBehavior {

    // 行为扩展的执行入口必须是run
    public function run(&$params){
        // 检测语言
        $this->checkLanguage();
    }

    /**
     * 语言检查
     * 检查浏览器支持语言，并自动加载语言包
     * @access private
     * @return void
     */
    private function checkLanguage() {
        // 不开启语言包功能，仅仅加载框架语言文件直接返回
        if (!C('LANG_SWITCH_ON',null,false)){
            return;
        }
        $Lang=M('Language');
        $language_id = (int)C('DEFAULT_LANG');
        $varLang =  C('VAR_LANGUAGE',null,'l');
        $langList = $this->getLanguageList();
        // 根据是否启用自动侦测设置获取语言选择
        if (C('LANG_AUTO_DETECT',null,true)){
            if(cookie('home_language')){// 获取上次用户的选择
                $language_id = (int)cookie('home_language');
            }
        }
        if(C('LANG_AUTO_DETECT_BROWER',null,false) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
             //自动侦测浏览器语言
                preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
                $lang_query=$Lang->where(array('directory'=>strtolower($matches[1])))->field('language_id')->find();
                $language_id=$lang_query['language_id'];
        }
        if(false === in_array($language_id,$langList)) { // 非法语言参数
            $language_id = (int)C('DEFAULT_LANG');
        }
        $language=$Lang->where('language_id='.$language_id)->field('directory')->find();
        $langSet=$language['directory'];
        define('LANG_SET',strtolower($langSet));
        // 读取框架语言包
        $file   =   THINK_PATH.'Lang/'.LANG_SET.'.php';
        if(LANG_SET != C('DEFAULT_LANG') && is_file($file))
            L(include $file);

        // 读取应用公共语言包
        $file   =  LANG_PATH.LANG_SET.'.php';
        if(is_file($file))
            L(include $file);
        
        // 读取模块语言包
        $file   =   MODULE_PATH.'Lang/'.LANG_SET.'.php';
        if(is_file($file))
            L(include $file);

        // 读取当前控制器语言包
        $file   =   MODULE_PATH.'Lang/'.LANG_SET.'/'.strtolower(CONTROLLER_NAME).'.php';
        if (is_file($file))
            L(include $file);
    }
    private function getLanguageList(){
        $Lang=M('Language');
        $map=array(
            'status'    =>1
            );
        $languages=$Lang->where($map)->field('language_id')->select();
        $lngs=array();
        foreach ($languages as  $language) {
            $lngs[]=$language['language_id'];
        }
        return $lngs;
    }
}
